package 面试.单例模式;

/*
 *懒汉式(常用)：
 *    延迟创建这个实例，即需要时才创建
 * （1）构造器私有化
 * （2）用一个静态变量保存这个唯一实例
 * （3）提供一个静态方法，获取这个实例
 */
public class Singleton2 {
    private static volatile Singleton2 instance = null;
    private Singleton2(){}
    public static Singleton2 getInstance(){
        //线程不安全
//        if(instance == null){
//            try {
//                Thread.sleep(100);
//            } catch (InterruptedException e) {
//                e.printStackTrace();
//            }
//            instance = new Singleton2();
//        }
        //线程安全
        if(instance == null) {
            synchronized (Singleton2.class) {
                if (instance == null) {
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    instance = new Singleton2();
                }
            }
        }
        return instance;
    }


}
